package com.bonshotels.DataLayer.Stubs;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.HashSet;

import com.bonshotels.DomainLayer.CtrlDades.FactoriaCtrlDades;
import com.bonshotels.DomainLayer.CtrlDades.ICtrlHotel;
import com.bonshotels.DomainLayer.CtrlDades.ICtrlPoblacio;
import com.bonshotels.DomainLayer.DomainModel.Hotel;
import com.bonshotels.DomainLayer.DomainModel.Poblacio;
import com.bonshotels.Excepcions.HotelNoExisteix;
import com.bonshotels.Excepcions.PoblacioNoExisteix;

public class CtrlPoblacioHSQLDB implements ICtrlPoblacio {
	
	Map<String, Poblacio> poblacions;
	
	public CtrlPoblacioHSQLDB() {
		poblacions = new HashMap<String, Poblacio>();
		
		ICtrlHotel ch = FactoriaCtrlDades.obteInstancia().obteCtrlHotel();
		
		Set<Hotel> hotels1 = new HashSet<Hotel>();
		Set<Hotel> hotels2 = new HashSet<Hotel>();
		
		try {
			hotels1.add(ch.obte("Princess"));
			hotels1.add(ch.obte("Juan Carlos"));
		
			hotels2.add(ch.obte("Migdia"));
			hotels2.add(ch.obte("Aprovarem"));		
		} catch (HotelNoExisteix e) {
			e.printStackTrace();
		}
		
		Poblacio p1 = new Poblacio();
		p1.setNom("Barcelona");
		p1.setHotel(hotels1);
		poblacions.put(p1.getNom(), p1);
		
		Poblacio p2 = new Poblacio();
		p2.setNom("Tarragona");
		p2.setHotel(hotels2);
		poblacions.put(p2.obteNom(), p2);
		
		Poblacio p3 = new Poblacio();
		p3.setNom("Sant Jaume de Frontanya");
		p3.setHotel(new HashSet<Hotel>() );
		poblacions.put(p3.obteNom(), p3);		
	}

	@Override
	public Poblacio obte(String nom) throws PoblacioNoExisteix {
		Poblacio p = poblacions.get(nom);
		if (!poblacions.containsKey(nom) ) throw new PoblacioNoExisteix();
		return p;
	}
	
	@Override
	public boolean existeix(String nom) {
		return poblacions.containsKey(nom);
	}

	@Override
	public Set<Poblacio> obteTots() {
		return new HashSet<Poblacio>(poblacions.values() );
	}

}
